package com.nicolas.pattern.template;

/**
 * AbstractClass（抽象类）：在抽象类中定义了一系列基本操作(PrimitiveOperations)，
 * 这些基本操作可以是具体的，也可以是抽象的，每一个基本操作对应算法的一个步骤，
 * 在其子类中可以重定义或实现这些步骤。同时，在抽象类中实现了一个模板方法(Template Method)，
 * 用于定义一个算法的框架，模板方法不仅可以调用在抽象类中实现的基本方法，
 * 也可以调用在抽象类的子类中实现的基本方法，还可以调用其他对象中的方法。
 * @author cuilj --2017年2月14日 下午4:57:44
 *
 */
public abstract class Account {
	//基本方法——具体方法  
    public boolean Validate(String account, String password)   
    {  
        System.out.println("账号 : " +  account);  
        System.out.println("密码：" +  password);  
        //模拟登录  
        if (account.equals("张无忌") && password.equals("123456"))   
        {  
            return true;  
        }  
        else   
        {  
            return false;  
        }  
    }  

    //基本方法——抽象方法  
    public abstract void CalculateInterest();  

    //基本方法——具体方法  
    public void Display()   
    {  
    	System.out.println("显示利息！");  
    }  

    //模板方法  
    public void Handle(String account, String password)   
    {  
        if (!Validate(account,password))   
        {  
        	System.out.println("账户或密码错误！");  
            return;  
        }  
        CalculateInterest();  
        Display();  
    }  
}
